import { request } from '@/utils/request'
import type { AxiosResponse } from 'axios'
// 导入所需类型
import type { TagCreate as TagCreateType, TagUpdate as TagUpdateType, Tag, TagListParams } from '../types/tag'
// 重新导出类型以供其他模块使用
export type { TagCreate, TagUpdate, Tag, TagListParams } from '../types/tag'

// 定义API响应类型
interface ApiResponse<T> {
  success: boolean;
  code: number;
  message: string;
  data: T;
  timestamp: string;
}

/**
 * 获取标签列表（支持分页）
 */
export const getTags = (params?: TagListParams) => {
  return request<ApiResponse<Tag[] | { items: Tag[], total: number, page: number, page_size: number }>>({
    url: '/tags/list',
    method: 'get',
    params
  }).then((response: AxiosResponse<ApiResponse<any>>) => {
    // 确保正确处理后端返回的标准响应格式（嵌套结构）
    if (response && response.data && response.data.success) {
      const data = response.data.data;
      // 检查是否是分页响应（对象包含items属性）
      if (data && typeof data === 'object' && Array.isArray(data.items)) {
        return data.items;
      }
      // 直接是数组
      if (Array.isArray(data)) {
        return data;
      }
    }
    console.warn('获取标签列表响应格式异常:', response);
    return [];
  });
}

/**
 * 获取标签列表（带分页信息）
 */
export const getTagsWithPagination = (params?: TagListParams) => {
  return request<ApiResponse<{ items: Tag[], total: number, page: number, page_size: number }>>({
    url: '/tags/list',
    method: 'get',
    params
  }).then((response: AxiosResponse<ApiResponse<any>>) => {
    if (response && response.data && response.data.success) {
      const data = response.data.data;
      // 分页响应
      if (data && typeof data === 'object' && Array.isArray(data.items)) {
        return {
          items: data.items,
          total: data.total || 0,
          page: data.page || 1,
          page_size: data.page_size || 50
        };
      }
      // 非分页响应，转换为分页格式
      if (Array.isArray(data)) {
        return {
          items: data,
          total: data.length,
          page: params?.page || 1,
          page_size: params?.page_size || 50
        };
      }
    }
    console.warn('获取标签列表响应格式异常:', response);
    return {
      items: [],
      total: 0,
      page: 1,
      page_size: 50
    };
  });
}

/**
 * 获取模块标签列表（用于下拉选择，不分页）
 */
export const getModuleTags = (moduleType: string) => {
  return request<ApiResponse<Tag[]>>({
    url: `/tags/module/${moduleType}`,
    method: 'get'
  }).then((response: AxiosResponse<ApiResponse<Tag[]>>) => {
    if (response && response.data && response.data.success && Array.isArray(response.data.data)) {
      return response.data.data;
    }
    console.warn('获取模块标签列表响应格式异常:', response);
    return [];
  });
}

/**
 * 创建标签
 * @param data 标签数据
 */
export const createTag = (data: TagCreateType) => {
  return request<ApiResponse<Tag>>({
    url: '/tags/',
    method: 'post',
    data
  }).then((response: AxiosResponse<ApiResponse<Tag>>) => {
    if (response && response.data && response.data.success) {
      return response.data.data;
    }
    throw new Error(response?.data?.message || '创建标签失败');
  });
}

/**
 * 更新标签
 * @param id 标签ID
 * @param data 标签数据
 */
export const updateTag = (id: string, data: TagUpdateType) => {
  return request<ApiResponse<Tag>>({
    url: `/tags/update/${id}`,
    method: 'put',
    data
  }).then((response: AxiosResponse<ApiResponse<Tag>>) => {
    if (response && response.data && response.data.success) {
      return response.data.data;
    }
    throw new Error(response?.data?.message || '更新标签失败');
  });
}

/**
 * 删除标签
 * @param id 标签ID
 */
export const deleteTag = (id: string) => {
  return request<ApiResponse<null>>({
    url: `/tags/delete/${id}`,
    method: 'delete'
  }).then((response: AxiosResponse<ApiResponse<null>>) => {
    if (response && response.data && !response.data.success) {
      throw new Error(response.data.message || '删除标签失败');
    }
    return response.data;
  });
}